Reactì ëìì± ëªšë륌 íìíë©°, íšìšì ìž íì€í¬ ì€ìŒì€ë§ì ìí ì°ì ìì íì ìŽì ì ë§ì¶° êžë¡ë² ì í늬ìŒìŽì ì UI ë°ìì± ë° ì¬ì©ì 겜íì í¥ììíµëë€.
React ëìì± ì°ì ìì í: íì€í¬ ì€ìŒì€ë§ êŽëЬ
ìëì ìž ì¹ ê°ë° ìžê³ìì ë°ìì±ìŽ ë°ìŽëê³ ì±ë¥ìŽ ì°ìí ì¬ì©ì ìží°íìŽì€(UI)륌 볎ì¥íë ê²ì ë§€ì° ì€ìí©ëë€. UI 구ì¶ì ìí ì ëì ìž JavaScript ëŒìŽëžë¬ëŠ¬ìž Reactë ìŽë¬í 목í륌 ë¬ì±íêž° ìí ê°ë ¥í êž°ë¥ì ì ê³µí©ëë€. ìµê·Œ ë²ì ì ëì ë êž°ë¥ ì€ íëë Reactê° íì€í¬ë¥Œ ì€ìŒì€ë§íê³ ì€ííë ë°©ìì ëí ëì± ìžë¶íë ì ìŽë¥Œ ê°ë¥íê² íë ëìì± ëªšë(Concurrent Mode)ì ëë€. ìŽ ëžë¡ê·ž ê²ì묌ì React ëìì± ëªšëì ê°ë ì í구íë©°, í¹í íšìšì ìž íì€í¬ ì€ìŒì€ë§ì ìíŽ ì°ì ìì í륌 íì©íë ë°©ë²ì ì€ì ì ë¡ëë€.
React ëìì± ëªšë ìŽíŽ
Reactì ëìì± ëªšëë ì ë°ìŽíž ë ëë§ì ìí ìë¡ìŽ íšë¬ë€ìì ì ìí©ëë€. Ʞ졎ì ëêž°ì ë ëë§ ë°©ì곌 ë¬ëЬ, ëìì± ëªšëë Reactê° ë ëë§ íì€í¬ë¥Œ ì€ëš, ìŒì ì€ì§ ë° ì¬ê°í ì ìëë¡ í©ëë€. ìŽë¬í ì ì°ì±ì ë€ìí ì íì ì ë°ìŽížë¥Œ ì°ì ììííê³ êŽëЬíë ë° ì€ìíë©°, ì¬ì©ì ìížìì©ê³Œ ê°ì ê³ ì°ì ìì íì€í¬ë ìŠì ì²ëЬëê³ ë°±ê·žëŒìŽë ë°ìŽí° ê°ì žì€êž°ì ê°ì ì ì°ì ìì íì€í¬ë ë íšìšì ìŒë¡ ì€ìŒì€ë§ëëë¡ í©ëë€.
ëìì± ëªšëì íµì¬ ììŽëìŽë UI륌 ëì± ë°ìì ìŒë¡ ëëŒê² íë ê²ì ëë€. Reactë íì€í¬ë¥Œ ì§ë¥ì ìŒë¡ ì€ìŒì€ë§íšìŒë¡ìš, ê³ì° ì§ìœì ìž ìì ì€ UIê° ë©ì¶ê±°ë ìëµíì§ ìë ê²ì ë°©ì§í ì ììµëë€. ìŽë í¹í ì íë ì²ëЬ ë¥ë ¥ìŽë ë늰 ë€ížìí¬ ì°ê²°ì ê°ì§ ì¥ì¹ìì ëì± ë¶ëëœê³ ìŠê±°ìŽ ì¬ì©ì 겜íì ì ê³µí©ëë€. ìŒë³ž ëì¿ì ì¬ì©ìê° êžë¡ë² ì ììê±°ë íë«íŒê³Œ ìížìì©íë ìí©ì ììíŽ ë³Žìžì. ëìì± ëªšë륌 ì¬ì©íë ìŽ íë«íŒì ì¬ì©ìê° íŽëŠí í목ì íì륌 ì°ì ììííê³ , ê³ íŽìë ì í ìŽë¯žì§ ê°ì žì€êž°ì ê°ì ë늰 íì€í¬ë¥Œ ëì€ìŒë¡ ì°êž°í ì ììµëë€. ìŽë¥Œ íµíŽ ì¬ì©ìë í° ì§ì° ììŽ ê³ì íìí ì ììµëë€.
ëìì± ëªšëì 죌ì ìŽì ì ë€ì곌 ê°ìµëë€:
- í¥ìë ë°ìì±: ë³µì¡í ì ë°ìŽíž ì€ìë UIê° ë°ìì±ì ì ì§í©ëë€.
- í¥ìë ì¬ì©ì 겜í: ë ë¶ëë¬ìŽ ì í곌 ìížìì©ì ë í° ì¬ì©ì ë§ì¡±ìŒë¡ ìŽìŽì§ëë€.
- íì€í¬ ì°ì ìì ì§ì : ì€ìí ì ë°ìŽížê° 뚌ì ì²ëЬëìŽ UI ì°šëšì ë°©ì§í©ëë€.
- ìµì íë 늬ìì€ ì¬ì©: íšìšì ìž ì€ìŒì€ë§ì 늬ìì€ ìë¹ë¥Œ ìµìíí©ëë€.
ì°ì ìì íì ìí
ì°ì ìì íë ì°ê²°ë ì°ì ììì íšê» ìì륌 ì ì¥í ì ìë ë°ìŽí° 구조ì ëë€. íìì ìì륌 ê²ìí ë, ê°ì¥ ëì ì°ì ìì륌 ê°ì§ ììê° íì 뚌ì ë°íë©ëë€. React ëìì± ëªšëìì ì°ì ìì íë ë€ìí ì ë°ìŽížì ì€ìŒì€ë§ì êŽëЬíë ë° ì€ìí ìí ì í©ëë€. ìŽë€ì Reactê° ì€ìëì ë°ëŒ íì€í¬ì ì°ì ìì륌 ì í ì ìëë¡ íì¬, ì¬ì©ì ìížìì©ìŽë ìŠê°ì ìž UI ì ë°ìŽížì ê°ì ê°ì¥ ì€ìí ì ë°ìŽížê° ì§ì° ììŽ ì²ëЬëëë¡ ë³Žì¥í©ëë€.
ëžëŒì§ 늬ì°ë°ìë€ìŽë£šì ì¬ì©ìê° ì¹ì¬ìŽížìì ꞎ ì í 늬뷰 목ë¡ì ì€í¬ë¡€íë ìë늬ì€ë¥Œ ìê°íŽ ë³Žìžì. ì¬ì©ìê° ì€í¬ë¡€íšì ë°ëŒ ì¹ì¬ìŽížë ë ë§ì 늬뷰륌 ë¡ëíŽìŒ í©ëë€. ì°ì ìì í륌 ì¬ì©íì¬ Reactë 볎ìŽë 늬뷰ì ë ëë§ì ë ëì ì°ì ìì륌 í ë¹íê³ , ìì§ ë·°í¬ížì ìë 늬뷰륌 믞늬 ê°ì žì€ë ë°ë ë ë®ì ì°ì ìì륌 í ë¹í ì ììµëë€. ìŽë ìë¡ìŽ ëŠ¬ë·°ê° ë¡ëëë ëì UIê° ë©ì¶ë ê²ì ë°©ì§íì¬ ìíí ì€í¬ë¡€ë§ 겜íì 볎ì¥í©ëë€.
React ëŽìì ì°ì ìì í륌 구ííë ë°ë ì¬ë¬ ëšê³ê° í¬íšë©ëë€:
- ì°ì ìì ì ì: íì€í¬ì ëí ë€ìí ì°ì ìì ìì€ì ê²°ì í©ëë€(ì: 'user-interaction', 'animation', 'data-fetch').
- í ìì±: ì°ì ìì í ë°ìŽí° 구조륌 구íí©ëë€(JavaScript ë°°ìŽê³Œ ì ì í ì ë ¬ ë©ìë륌 ì¬ì©íê±°ë 믞늬 ë¹ëë ëŒìŽëžë¬ëŠ¬ë¥Œ íì©).
- íì íì€í¬ ì¶ê°: ì ë°ìŽížê° ížëŠ¬ê±°ë ë, êŽë š íì€í¬ë¥Œ í ë¹ë ì°ì ììì íšê» íì ì¶ê°í©ëë€.
- íì€í¬ ì²ëЬ: Reactë íìì ê°ì¥ ëì ì°ì ìì íì€í¬ë¥Œ ê²ìíê³ ì€ííì¬ íìí UI ë³ê²œ ì¬íì ë ëë§í ì ììµëë€.
React Hooks륌 ì¬ì©í ì€ì§ì ìž êµ¬í
React Hooksë íšìí 컎í¬ëíž ëŽìì ìíì ì¬ìŽë ìŽíížë¥Œ êŽëЬíë ížëЬí ë°©ë²ì ì ê³µí©ëë€. ëìì± ëªšëì ì°ì ìì í륌 ì¬ì©í ë, í ì íì©íì¬ í êŽëЬ ë° íì€í¬ ì€ìŒì€ë§ ë¡ì§ì ì²ëЬí ì ììµëë€. ë€ìì Ʞ볞ì ìž ììì ëë€:
import React, { useState, useEffect, useRef } from 'react';
// Define task priorities
const priorities = {
userInteraction: 1,
animation: 2,
dataFetch: 3,
};
// Custom hook for managing the Priority Queue
function usePriorityQueue() {
const [queue, setQueue] = useState([]);
const queueRef = useRef(queue);
useEffect(() => {
queueRef.current = queue;
}, [queue]);
const enqueue = (task, priority) => {
const newTask = {
task,
priority,
timestamp: Date.now(), // Add a timestamp for tie-breaking
};
setQueue(prevQueue => {
const newQueue = [...prevQueue, newTask].sort((a, b) => {
// Sort by priority (lower number = higher priority)
const priorityComparison = a.priority - b.priority;
if (priorityComparison !== 0) {
return priorityComparison;
}
// If priorities are the same, sort by timestamp (earlier first)
return a.timestamp - b.timestamp;
});
return newQueue;
});
};
const dequeue = () => {
if (queueRef.current.length === 0) {
return null;
}
const nextTask = queueRef.current[0];
setQueue(prevQueue => prevQueue.slice(1));
return nextTask;
};
return { enqueue, dequeue, queue: queueRef.current };
}
function MyComponent() {
const { enqueue, dequeue, queue } = usePriorityQueue();
const [data, setData] = useState(null);
const [isLoading, setIsLoading] = useState(false);
// Simulate a user interaction
const handleUserInteraction = () => {
enqueue(() => {
// Perform an update that the user expects to see immediately
console.log('User interaction task running');
}, priorities.userInteraction);
};
// Simulate an animation
const handleAnimation = () => {
enqueue(() => {
// Update animation state
console.log('Animation task running');
}, priorities.animation);
};
// Simulate data fetching
const fetchData = async () => {
setIsLoading(true);
enqueue(async () => {
// Fetch data and update the state
try {
const response = await fetch('https://api.example.com/data');
const jsonData = await response.json();
setData(jsonData);
} catch (error) {
console.error('Error fetching data:', error);
} finally {
setIsLoading(false);
}
}, priorities.dataFetch);
};
// Process the queue
useEffect(() => {
const processQueue = async () => {
if (queue.length > 0) {
const taskItem = dequeue();
if (taskItem) {
await taskItem.task();
}
}
};
const intervalId = setInterval(processQueue, 10); // Adjust interval as needed
return () => clearInterval(intervalId);
}, [queue, dequeue]);
return (
{isLoading && Loading...
}
{data && Data fetched: {JSON.stringify(data)}
}
);
}
export default MyComponent;
ìŽ ìììì:
- `usePriorityQueue` Hook: `useState`ì `useEffect`륌 ì¬ì©íì¬ ì°ì ìì í륌 êŽëЬí©ëë€.
- ì°ì ìì: ë€ìí íì€í¬ì ëí ì¬ë¬ ì°ì ìì ìì€ì ì ìí©ëë€.
- `enqueue` íšì: ì§ì ë ì°ì ììë¡ íì€í¬ë¥Œ íì ì¶ê°í©ëë€.
- `dequeue` íšì: ê°ì¥ ëì ì°ì ìì íì€í¬ë¥Œ ê²ìíê³ ì ê±°í©ëë€.
- `MyComponent` 컎í¬ëíž: í ì ì¬ì©íì¬ íì€í¬ë¥Œ íì ë£ê³ ì²ëЬíë ë°©ë²ì 볎ì¬ì€ëë€. ì¬ì©ì ìížìì©, ì ëë©ìŽì ë° ë°ìŽí° ê°ì žì€êž°ë¥Œ ì뮬ë ìŽì íì¬ ë€ìí íì€í¬ ì°ì ìì륌 ì¬ì©íë ë°©ë²ì ìì°í©ëë€.
ìêµ ë°ë곌 ë¯žêµ ëŽììì ê°ìŽ ìžê³ ê°ì§ì ì¬ì©ìê° ì¬ì©íë êžë¡ë² ëŽì€ ì¹ì¬ìŽížì ì륌 ìê°íŽ ë³Žìžì. ì¬ì©ìê° í€ëëŒìž(ì¬ì©ì ìížìì©)ì íŽëŠí멎 íŽë¹ í€ëëŒìžì ë ëë§íë 컎í¬ëížë ìŠì ìëµíŽìŒ í©ëë€. ì 첎 êž°ì¬ì ìŽë¯žì§ ë¡ë©(dataFetch)곌 êŽë šë ë°ìŽí° ê°ì žì€êž°ë ì í늬ìŒìŽì ì ë°ìì±ì ì ì§íêž° ìíŽ ë ë®ì ì°ì ììë¡ ì€ìŒì€ë§ë ì ììµëë€. ìŽë ì 구íì íµíŽ ìœê² ë¬ì±í ì ììµëë€.
ê³ êž êž°ì ë° ê³ ë € ì¬í
ìŽì ììê° Reactìì ì°ì ìì íì ëí Ʞ볞ì ìž ìŽíŽë¥Œ ì ê³µíì§ë§, ë ë³µì¡í ìë늬ì€ë¥Œ ìí ëª ê°ì§ ê³ êž êž°ì 곌 ê³ ë € ì¬íìŽ ììµëë€:
- ìê° ë¶í (Time Slicing): Reactì `unstable_scheduleCallback`(ëë ê·ž ëìë€)ì ì¬ì©í멎 í¹ì ì°ì ììë¡ ìœë°±ì ì€ìŒì€ë§í ì ììµëë€. ìŽë Reactì íì€í¬ ì€ìŒì€ë§ì ëí ë ì§ì ì ìž ì ìŽê¶ì ë¶ì¬íë©°, ë³µì¡íê³ ê³ì° ì§ìœì ìž ìì ì í¹í ì ì©í©ëë€. ê·žë¬ë ìŽë€ì ë¶ìì í APIìŽë¯ë¡ ë³ê²œë ì ììŒë¯ë¡ 죌ìíŽì ì¬ì©íŽìŒ í©ëë€.
- íì€í¬ ì·šì: ë ìŽì êŽë š ìë íì€í¬ë¥Œ ì·šìíë ë©ì»€ëìŠì ì ê³µí©ëë€. ìŽë ì¬ì©ìê° UIì ìížìì©í ë ë³Žë¥ ì€ìž ìŒë¶ íì€í¬ê° ì€ëëìì ì ìì ë(ì: ì¬ì©ìê° ì ê²ì 쿌늬륌 ì ë ¥í ë ê²ì ìì² ì·šì) í¹í ì ì©í©ëë€.
- ëë°ìŽì± ë° ì€ë¡íë§: íì€í¬ ì€í ë¹ë륌 ì ìŽíêž° ìíŽ ëë°ìŽì±(Debouncing) ë° ì€ë¡íë§(Throttling) êž°ì ì ì¬ì©í©ëë€. ëë°ìŽì±ì íšìê° ë묎 ì죌 ì€íëë ê²ì ë°©ì§íë ë° ì ì©íë©°, ì€ë¡íë§ì íšìì ì€í ìë륌 ì ííë ë° ì¬ì©ë ì ììµëë€. ìŽë ë¶íìí ë ëë§ ì£Œêž°ë¥Œ ë°©ì§íê³ ì±ë¥ì í¥ììí€ë ë° ëììŽ ë©ëë€.
- ì€ë¥ ì²ëЬ: íì€í¬ ì€í ì€íšì ê°ìŽ íìì ë°ìí ì ìë ì ì¬ì ìž ë¬žì 륌 ì°ìíê² ì²ëЬíêž° ìíŽ ê°ë ¥í ì€ë¥ ì²ëŠ¬ë¥Œ 구íí©ëë€. íì€í¬ê° ììžë¥Œ ì ì í ì²ëЬíëë¡ ë³Žì¥í©ëë€.
- ì±ë¥ íë¡íìŒë§: React ê°ë°ì ë구륌 íì©íì¬ ì í늬ìŒìŽì ì ì±ë¥ì íë¡íìŒë§í©ëë€. ë ëë§ íë¡ìžì€ì ë³ëª© íìì ìë³íê³ ê·žì ë°ëŒ íì€í¬ ì€ìŒì€ë§ì ìµì íí©ëë€. React Profilerì ê°ì ë구ë ê° ì»Ží¬ëíž ë ëë§ì ììë ìê°ì ìë³í ì ììµëë€.
- ëŒìŽëžë¬ëЬ: `react-async`ì ê°ìŽ ëì íì€í¬ êŽëŠ¬ë¥Œ ìíŽ í¹ë³í ì€ê³ë ëŒìŽëžë¬ëЬ ì¬ì©ì ê³ ë €íŽ ë³Žìžì. ìŽë¬í ëŒìŽëžë¬ëЬë 믞늬 ë¹ëë êž°ë¥ì ì ê³µíë©° ì°ì ìì í ë° ëì íì€í¬ ì€ìŒì€ë§ 구íì ëšìíí ì ììµëë€.
- ëžëŒì°ì ížíì±: ìŒêŽë ëìì 볎ì¥íêž° ìíŽ ë€ìí ëžëŒì°ì ë° ì¥ì¹ìì 구íì í ì€íží©ëë€. ëí ëë°ìŽ(ìžë)ì ê°ìŽ ìží°ë· ìëê° ë€ë¥Œ ì ìë ë€ìí ì§ëЬì ìì¹ì ì¬ì©ììê² ì í©íì§ íìžíêž° ìíŽ ë€ìí ë€ížìí¬ ë° ì¬ì©ìì ìží°ë· ì°ê²°ììì ì í늬ìŒìŽì ì±ë¥ì ê³ ë €í©ëë€.
ëªšë² ì¬ë¡ ë° ìµì í ì ëµ
React ëìì± ëªšëì ì°ì ìì í륌 íšê³Œì ìŒë¡ ì¬ì©íë €ë©Ž ë€ì ëªšë² ì¬ë¡ë¥Œ ê³ ë €íììì€:
- ì¬ì©ì 겜í ì°ì ìì: ì¬ì©ì 겜íì ì§ì ì ìž ìí¥ì 믞ì¹ë íì€í¬ë¥Œ íì ì°ì ììë¡ ì§ì í©ëë€. ì¬ì©ì ìížìì©, ì ëë©ìŽì ë° ìŠê°ì ìž UI ì ë°ìŽížë íì ê°ì¥ ëì ì°ì ìì륌 ê°ì žìŒ í©ëë€.
- ë©ìž ì€ë ë ì°šëš ë°©ì§: ê³ì° ì§ìœì ìž íì€í¬ë ê°ë¥í ê²œì° íì 백귞ëŒìŽë ì€ë ë ëë ì¹ ìì»€ë¡ ì€íë¡ëëëë¡ í©ëë€. ìŽë ì¥êž° ì€í ìì ì€ì UIê° ë©ì¶ë ê²ì ë°©ì§í©ëë€.
- 컎í¬ëíž ë ëë§ ìµì í: ë©ëªšìŽì ìŽì êž°ì (ì: `React.memo`)ì íì©íì¬ ë¶íìí 컎í¬ëíž ì¬ë ëë§ì ë°©ì§í©ëë€. ì¬ë ëë§ì ì±ë¥ì ìí¥ì ë¯žì¹ ì ììŒë¯ë¡ ìµì íëìŽìŒ í©ëë€.
- ì ë°ìŽíž ë°°ì¹(Batch Updates): êŽë š ìí ì ë°ìŽížë¥Œ 귞룹ííì¬ ë ëë§ ì£Œêž° ì륌 ìµìíí©ëë€. Reactë ì ë°ìŽížë¥Œ ìëìŒë¡ ë°°ì¹í ì ìì§ë§, `React.useReducer`ì ê°ì êž°ì ì ì¬ì©íì¬ ìëìŒë¡ ë°°ì¹í ìë ììµëë€.
- ì§ì° ë¡ë©(Lazy Loading): ìŽë¯žì§ ë° êžêŒŽê³Œ ê°ìŽ ì€ìíì§ ìì 늬ìì€ì ëíŽ ì§ì° ë¡ë©ì 구íí©ëë€. ìŽë 죌ì ìœí ìž ê° ë 빚늬 ë¡ëëëë¡ íì¬ ìŽêž° ì¬ì©ì 겜íì í¥ììíµëë€.
- ìœë ë¶í (Code Splitting): ì í늬ìŒìŽì ì ë ìì ìœë ë©ìŽëŠ¬ë¡ ëëê³ íìí ë ë¡ëí©ëë€. ìŽë ìŽêž° ë¡ë ìê°ì ê°ì íê³ ì í늬ìŒìŽì ì ì 첎 í¬êž°ë¥Œ ì€ì ëë€.
- ì êž°ì ìž ì±ë¥ 몚ëí°ë§: Lighthouseì ê°ì ë구륌 ì¬ì©íì¬ ì í늬ìŒìŽì ì ì±ë¥ì ì§ìì ìŒë¡ 몚ëí°ë§íì¬ ì±ë¥ ë³ëª© íìì ìë³íê³ íŽê²°í©ëë€.
- ëŒìŽëžë¬ëЬ ì¬ì©(ì ì í 겜ì°): ì°ì ìì í 구íìŽ ë²ê±°ë¡ìŽ ê²œì° êž°ì¡Ž ëŒìŽëžë¬ëЬ ì¬ì©ì ê³ ë €í©ëë€. ê·žë¬ë íì ëŒìŽëžë¬ëŠ¬ê° ë²ë€ í¬êž°ì ì±ë¥ì 믞ì¹ë ìí¥ì íê°íŽìŒ í©ëë€.
ì€ì ì¬ë¡ ë° ì¬ì© ì¬ë¡
React ëìì± ëªšëì ì°ì ìì íë UI ë°ìì± ë° ì¬ì©ì 겜íì í¥ììí€êž° ìíŽ ë€ìí ì€ì ìë늬ì€ì ì ì©ë ì ììµëë€. ë€ìì ëª ê°ì§ ììì ëë€:
- ì ììê±°ë íë«íŒ: ì í ìžë¶ ì 볎 ë° ì¥ë°êµ¬ë ì¶ê° ë²íŒ ë ëë§ì ì°ì ììë¡ ì§ì íê³ , ê³ íŽìë ì í ìŽë¯žì§ ë° êŽë š ì í ì¶ì² ë¡ë©ì ì°êž°í©ëë€. ížì£Œ ìëëì ì¬ì©ììê²ë ì í ìŽë¯žì§ë¥Œ 볌 ë ë ë¶ëë¬ìŽ ëžëŒì°ì§ 겜íì ì믞í©ëë€.
- ìì 믞ëìŽ ì í늬ìŒìŽì : ì ê²ì묌 ë° ì¬ì©ì ìížìì© íì륌 ì°ì ììë¡ ì§ì íê³ , ëêž ë° ë¯žëìŽ ë¯žëŠ¬ë³Žêž° ë¡ë©ì ì°êž°í©ëë€. ìŒë ëìŽë¡ë¹ì ì¬ì©ììê²ë íŒë륌 ì€í¬ë¡€í ë ë ë°ìì ìž ê²œíì ì믞í©ëë€.
- ëì볎ë ì í늬ìŒìŽì : ì€ìí ëì볎ë ì§í ë ëë§ì ì°ì ììë¡ ì§ì íê³ , ë ì€ìí ë°ìŽí° ê°ì žì€êž° ëë 백귞ëŒìŽë íì€í¬ë ì°êž°í©ëë€. ì륎íší°ë ë¶ìë žì€ììŽë ì€ì ì¬ì©ìê° ì§í ë° íµê³ë¥Œ 볌 ë ì í늬ìŒìŽì ì ë°ìì±ìŽ íµì¬ìŽëŒê³ ììíŽ ë³Žìžì.
- ìží°ëí°ëž ê²ì: ì¬ì©ì ì ë ¥ ë° ê²ì ë¡ì§ ì²ëŠ¬ë¥Œ ì°ì ììë¡ ì§ì íê³ , ë³µì¡í ì ëë©ìŽì ë° ìê° íšê³Œ ë ëë§ì ì°êž°í©ëë€. ì륌 ë€ìŽ, ëíë¯Œêµ ììžì ê²ìŽëšžìê²ë ê·žëíœë³Žë€ ì ë ¥ìŽ ì°ì ììê° ëììŒ í©ëë€.
- ìœí ìž êŽëЬ ìì€í (CMS): íìŽì§ ìœí ìž ë° íì íì륌 ì°ì ììë¡ ì§ì íê³ , ì±ë¥ì ìí¥ì ë¯žì¹ ì ìë ìë ì ì¥ ë° ë°±ê·žëŒìŽë íë¡ìžì€ ì ì¥ì ì°êž°í©ëë€.
ê²°ë¡
React ëìì± ëªšëë ì°ì ìì íì ê²°í©íì¬ ê°ë°ìê° ë§€ì° ë°ìì±ìŽ ë°ìŽëê³ ì±ë¥ìŽ ì°ìí UI륌 ë§ë€ ì ìëë¡ ì§ìí©ëë€. íì€í¬ ì€ìŒì€ë§ ë° ì°ì ìì ì§ì ìì¹ì ìŽíŽíšìŒë¡ìš, í¹í ë€ìí ì¬ì©ì륌 ê°ì§ êžë¡ë² ì í늬ìŒìŽì ìì ì¬ì©ì 겜íì í¬ê² í¥ììí¬ ì ììµëë€. ìŽ ì ê·Œ ë°©ìì ì¬ì©ìì ì¥ì¹, ë€ížìí¬ ì°ê²° ëë ì§ëЬì ìì¹ì êŽê³ììŽ ì í늬ìŒìŽì ìŽ ì ì°íê³ ìížìì©ì ìŽëŒê³ ëëŒëë¡ ë³Žì¥í©ëë€.
ì°ì ìì í륌 ì ëµì ìŒë¡ 구ííšìŒë¡ìš React ì í늬ìŒìŽì ì ë ë¹ ë¥Žê³ ìŠê²ê² ë§ë€ ì ììŒë©°, ê¶ê·¹ì ìŒë¡ ì¬ì©ì ì°žì¬ëì ë§ì¡±ë륌 ëìŒ ì ììµëë€. ëìì± ëªšëì íì ë°ìë€ì¬ ì€ëë¶í° ë ë°ìì±ìŽ ë°ìŽëê³ ì±ë¥ìŽ ì°ìí ì¹ ì í늬ìŒìŽì ì 구ì¶íìžì. ìµìì 결곌륌 볎ì¥íêž° ìíŽ ëªšë² ì¬ë¡ë¥Œ ê³ ë €íê³ , ìœë륌 ìµì ííë©°, ì í늬ìŒìŽì ì ì±ë¥ì ì§ìì ìŒë¡ 몚ëí°ë§íë ê²ì ìì§ ë§ìžì. êžë¡ë² ì¬ì©ì륌 ìŒëì ëê³ ì ìíê³ ì§ìì ìŒë¡ ê°ì íììì€.
ê³ì ê°ë°í멎ì ì í늬ìŒìŽì ì ì êž°ì ìŒë¡ ë²€ì¹ë§í¹íê³ ì°ì ìì ìì€ì ì¡°ì íì¬ ë°ìì±ê³Œ 늬ìì€ íì© ì¬ìŽì ìŽìì ìž ê· íì ì°Ÿë ê²ì ìì§ ë§ìžì. ìì ì€ëª ë ê°ë ë€ì ëìììŽ ì§ííê³ ììŒë©°, ëªšë² ì¬ë¡ë¥Œ ìµì ìíë¡ ì ì§íë ê²ìŽ ì€ìí©ëë€. ì§ìì ìž íìµìŽ íµì¬ì ëë€. ìŽë ì ìžê³ ì¬ì©ììê² ë ìŠê±°ìŽ ê²œíì ì ê³µí ê²ì ëë€.